#ifndef ANGLEAXIS_H
#define ANGLEAXIS_H

#include "typedefs.h"
#include "quaternion.h"
#include "vector3.h"

namespace Math
{
class AngleAxis
{

#ifdef USE_FLOAT
    Eigen::AngleAxisf v;
#else
    Eigen::AngleAxisd v;
#endif
public:
    AngleAxis();

    AngleAxis(const AngleAxis &a) { v = a.v;}

#ifdef USE_FLOAT
    AngleAxis(const Eigen::AngleAxisf &ev) { v = ev; }
#else
    AngleAxis(const Eigen::AngleAxisf &ev) { v = ev; }
#endif

    AngleAxis(const Quaternion &q) { v = Eigen::AngleAxis<Real>(q.getEigen()); }

    AngleAxis(const Real &angle, const Vector3 &axis) { v = Eigen::AngleAxis<Real>(angle,axis.getEigen()); }

    Real getAngle() const { return v.angle(); }

    Vector3 getAxis() const { return v.axis(); }

    Eigen::AngleAxis<Real> getEigen() const { return v; }


};
}

#endif // ANGLEAXIS_H
